// Copyright 2017 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once

#include "buffer.h"

// Guard against repeating processing on the same data
class ContentLatch {
 public:
  ContentLatch(bool consumes_dependents)
      : consumes_dependents_(consumes_dependents) {}

  bool IsNewContent(const EditNotification& notification) {
    if (notification.content.SameContentIdentity(last_str_)) {
      if (!consumes_dependents_) {
        return false;
      } else if (last_deps_ == notification.referenced_file_version) {
        return false;
      }
    }
    last_str_ = notification.content;
    last_deps_ = notification.referenced_file_version;
    return true;
  }

 private:
  const bool consumes_dependents_;
  AnnotatedString last_str_;
  uint64_t last_deps_ = 0;
};
